package com.meditor.map
{
	import flash.display.DisplayObject;
	import flash.display.DisplayObjectContainer;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.events.ProgressEvent;
	import flash.geom.Rectangle;
	
	import mx.core.IUIComponent;
	import mx.managers.ISystemManager;
	import com.meditor.lib.BaseGC;
	
	/**
	 * 显示元件的基类
	 * */
	public class BaseDisplayObject extends Sprite implements IUIComponent
	{
		/**
		 * 构造函数
		 * */
		public function BaseDisplayObject()
		{
			//TODO: implement function
			super();
			addEventListener(Event.REMOVED,removedFunction);
		}
		/**
		 * 重写添加事件监听的方法 
		 */		
		override public function addEventListener(type:String, listener:Function, useCapture:Boolean=false, priority:int=0, useWeakReference:Boolean=false):void
		{
			super.addEventListener(type,listener,useCapture,priority,useWeakReference);
		}
		
		/**
		 * 重写alpha属性
		 */		
		override public function get alpha():Number
		{
			return super.alpha;
		}
		
		override public function set alpha(value:Number):void
		{
			super.alpha = value;
		}
		
		/**
		 *重写x属性
		 * */
		override public function get x():Number
		{
			return super.x;
		}
		
		override public function set x(value:Number):void
		{
			super.x = value;
		}
		/**
		 * 重写y属性
		 * */
		override public function get y():Number
		{
			return super.y;
		}
		
		override public function set y(value:Number):void
		{
			super.y = value;
		}
		
		/**
		 * 获取基线位置
		 * */
		public function get baselinePosition():Number
		{
			//TODO: implement function
			return 0;
		}
		
		/**
		 * 重写调遣事件的方法
		 * */
		override public function dispatchEvent(event:Event):Boolean
		{
			return super.dispatchEvent(event);
		}
		
		/**
		 * 重写height属性
		 * */
		override public function get height():Number
		{
			return super.height;
		}
		
		override public function set height(value:Number):void
		{
			super.height = value;
		}
				
		/**
		 * 重写visible属性
		 * */
		override public function get visible():Boolean
		{
			return super.visible;
		}
		
		override public function set visible(value:Boolean):void
		{
			super.visible = value;
		}
		
		/**
		 * 重写scaleX属性
		 * */
		override public function get scaleX():Number
		{
			return super.scaleX;
		}
		
		override public function set scaleX(value:Number):void
		{
			super.scaleX = value;
		}
		
		/**
		 * 重写scaleYn属性
		 * */
		override public function get scaleY():Number
		{
			return super.scaleY;
		}
		
		override public function set scaleY(value:Number):void
		{
			super.scaleY = value;
		}		
		
		/**
		 * 获取位图缓存
		 * */
		override public function get cacheAsBitmap():Boolean
		{
			return super.cacheAsBitmap;
		}
		
		override public function set cacheAsBitmap(value:Boolean):void
		{
			super.cacheAsBitmap = value;
		}
		
		/**
		 * 重写mask属性
		 * */
		override public function get mask():DisplayObject
		{
			return super.mask;
		}
		
		override public function set mask(value:DisplayObject):void
		{
			super.mask = value;
		}
		
		/**
		 * 重写willTrgger属性
		 * [继承] 检查是否用此 EventDispatcher 对象或其任何始祖为指定事件类型注册了事件侦听器。将指定类型的事件分派给此 EventDispatcher 对象或其任一后代时，如果在事件流的任何阶段触发了事件侦听器，则此方法返回 true。 
		 * hasEventListener() 与 willTrigger() 方法的区别是：hasEventListener() 只检查它所属的对象，而 willTrigger() 方法检查整个事件流以查找由 type 参数指定的事件。
		 * 事件流适用于 SWF 内容中使用的 ActionScript 3.0 显示列表。当从 LoaderInfo 对象调用 willTrigger() 时，只考虑调用方可以访问的侦听器。
		 *
		 */		
		override public function willTrigger(type:String):Boolean
		{
			return super.willTrigger(type);
		}
		/**
		 * 重写opaqueBackground属性
		 * 指定显示对象是否由于具有某种背景颜色而不透明。透明的位图包含 Alpha 通道数据，并以透明的方式进行绘制。不透明位图没有 Alpha 通道（呈现速度比透明位图快）。如果位图是不透明的，则您可以指定要使用的其自己的背景颜色。 
		 * 如果设置为某个数值，则表面是不透明的，并且带有该数值指定的 RGB 背景颜色。如果设置为 null（默认值），则显示对象将有透明背景。
		 * opaqueBackground 属性主要与 cacheAsBitmap 属性一起使用，以优化呈现。对于 cacheAsBitmap 属性设置为 true 的显示对象，设置 opaqueBackground 可以提高呈现性能。
		 * 如果在 shapeFlag 参数设置为 true 时调用 hitTestPoint() 方法，则不透明的背景区域不 匹配。
		 * 不透明背景区域不响应鼠标事件。
		 * 
		 */		
		override public function get opaqueBackground():Object
		{
			return super.opaqueBackground;
		}
		
		/**
		 * 重写scrollRect属性
		 * 显示对象的滚动矩形范围。显示对象被裁切为矩形定义的大小，当您更改 scrollRect 对象的 x 和 y 属性时，它会在矩形内滚动。 
		 * scrollRect Rectangle 对象的属性使用显示对象的坐标空间，并缩放到像整个显示对象一样。滚动显示对象上已裁切窗口的转角范围是显示对象的原点 (0,0) 和矩形的宽度和高度定义的点。它们不按原点居中，而是使用原点定义区域的左上角。滚动的显示对象始终以整像素为增量进行滚动。 
         * 您可以通过设置 scrollRect Rectangle 对象的 x 属性来左右滚动对象， 还可以通过设置 scrollRect 对象的 y 属性来上下滚动对象。如果显示对象旋转了 90 度，并且您左右滚动它，则实际上显示对象会上下滚动。
		 * 
		 */		
		override public function get scrollRect():Rectangle
		{
			return super.scrollRect;
		}
		
		override public function set scrollRect(value:Rectangle):void
		{
			super.scrollRect = value;
		}
		
		/**
		 * 获取/设置 文档属性
		 * */
		public function get document():Object
		{
			//TODO: implement function
			return null;
		}
		
		public function set document(value:Object):void
		{
			//TODO: implement function
		}
		
		/**
		 * 获取/设置 可用状态
		 * */
		public function get enabled():Boolean
		{
			//TODO: implement function
			return false;
		}
		
		public function set enabled(value:Boolean):void
		{
			//TODO: implement function
		}
		
		/**
		 * 取显示基元精确的高度
		 * */
		public function get explicitHeight():Number
		{
			//TODO: implement function
			return 0;
		}
		/**
		 * 设置显示基元精确的高度
		 * */
		public function set explicitHeight(value:Number):void
		{
			//TODO: implement function
		}
		
		/**
		 * 获取显示基元精确高度最大值
		 * */
		public function get explicitMaxHeight():Number
		{
			//TODO: implement function
			return 0;
		}
		
		/**
		 * 获取显示基元精确宽度最大值
		 * */
		public function get explicitMaxWidth():Number
		{
			//TODO: implement function
			return 0;
		}
		
		/**
		 * 获取显示基元精确高度最小值
		 * */
		public function get explicitMinHeight():Number
		{
			//TODO: implement function
			return 0;
		}
		
		/**
		 * 获取显示基元精确宽度最小值
		 * */
		public function get explicitMinWidth():Number
		{
			//TODO: implement function
			return 0;
		}
		
		/**
		 * 取显示基元精确的高度
		 * */
		public function get explicitWidth():Number
		{
			//TODO: implement function
			return 0;
		}
		
		/**
		 * 设置显示基元精确的高度
		 * */		
		public function set explicitWidth(value:Number):void
		{
			//TODO: implement function
		}
		
		/**
		 * 获取/设置 焦点面板
		 * */
		public function get focusPane():Sprite
		{
			//TODO: implement function
			return null;
		}
		
		public function set focusPane(value:Sprite):void
		{
			//TODO: implement function
		}
				
		/**
		 * 获取/设置 是否包含布局属性
		 * */
		public function get includeInLayout():Boolean
		{
			//TODO: implement function
			return false;
		}
		
		public function set includeInLayout(value:Boolean):void
		{
			//TODO: implement function
		}
		
		/**
		 * 获取/设置是否包含弹出窗口
		 * */
		public function get isPopUp():Boolean
		{
			//TODO: implement function
			return false;
		}
		
		public function set isPopUp(value:Boolean):void
		{
			//TODO: implement function
		}
		
		/**
		 * 获取最大的高度
		 * */
		public function get maxHeight():Number
		{
			//TODO: implement function
			return 0;
		}
		
		/**
		 * 获取最大的宽度
		 * */
		public function get maxWidth():Number
		{
			//TODO: implement function
			return 0;
		}
		
		/**
		 * 获取/设置 显示基元尺寸的最小高度
		 * */
		public function get measuredMinHeight():Number
		{
			//TODO: implement function
			return 0;
		}
		
		public function set measuredMinHeight(value:Number):void
		{
			//TODO: implement function
		}
		
		/**
		 * 获取/设置 显示基元尺寸的最小宽度
		 * */
		public function get measuredMinWidth():Number
		{
			//TODO: implement function
			return 0;
		}
		
		public function set measuredMinWidth(value:Number):void
		{
			//TODO: implement function
		}
		
		/**
		 * 获取最小高度
		 */		
		public function get minHeight():Number
		{
			//TODO: implement function
			return 0;
		}
		
		/**
		 * 获取最小宽度
		 */	
		public function get minWidth():Number
		{
			//TODO: implement function
			return 0;
		}
		
		/**
		 * 获取/设置 所属元件
		 * */
		public function get owner():DisplayObjectContainer
		{
			//TODO: implement function
			return null;
		}
		
		public function set owner(value:DisplayObjectContainer):void
		{
			//TODO: implement function
		}
		
		/**
		 * 获取/设置 高度百分数
		 * */
		public function get percentHeight():Number
		{
			//TODO: implement function
			return 0;
		}
		
		public function set percentHeight(value:Number):void
		{
			//TODO: implement function
		}
		
		/**
		 * 获取/设置 宽度百分数
		 * */
		public function get percentWidth():Number
		{
			//TODO: implement function
			return 0;
		}
		
		public function set percentWidth(value:Number):void
		{
			//TODO: implement function
		}
		
		/**
		 * 获取/设置  系统管理器
		 * */
		public function get systemManager():ISystemManager
		{
			//TODO: implement function
			return null;
		}
		
		public function set systemManager(value:ISystemManager):void
		{
			//TODO: implement function
		}
		
		/**
		 * 获取/设置 补间动画属性集
		 * */
		public function get tweeningProperties():Array
		{
			//TODO: implement function
			return null;
		}
		
		public function set tweeningProperties(value:Array):void
		{
			//TODO: implement function
		}
		
		/**
		 * 初始化显示基元
		 * */
		public function initialize():void
		{
			//TODO: implement function
		}
		
		/**
		 *改变父级显示对像
		 * */
		public function parentChanged(p:DisplayObjectContainer):void
		{
			//TODO: implement function
		}
		
		/**
		 * 获取显示基元标准宽度
		 * */
		public function getExplicitOrMeasuredWidth():Number
		{
			//TODO: implement function
			return 0;
		}
		
		/**
		 * 获取显示基元标准高度
		 * */
		public function getExplicitOrMeasuredHeight():Number
		{
			//TODO: implement function
			return 0;
		}
		
		/**
		 * 设置显示基元是否可视
		 * */
		public function setVisible(value:Boolean, noEvent:Boolean=false):void
		{
			//TODO: implement function
		}
		
		/**
		 * 是否有所属元件
		 * */
		public function owns(displayObject:DisplayObject):Boolean
		{
			//TODO: implement function
			return false;
		}
		
		/**
		 * 获取/设置 显示基元尺寸的高度
		 * */
		public function get measuredHeight():Number
		{
			//TODO: implement function
			return 0;
		}
		
		public function get measuredWidth():Number
		{
			//TODO: implement function
			return 0;
		}
		
		/**
		 * 移动显示基元
		 * @param x  移动目的地的X坐标
		 * @param y	 移动目的地的Y坐标
		 * 
		 */		
		public function move(x:Number, y:Number):void
		{
			//TODO: implement function
		}
		
		/**
		 * 设置真实的大小
		 * @param newWidth  将要设置的属性的宽度
		 * @param newHeight  将要设置的属性的高度
		 * 
		 */		
		public function setActualSize(newWidth:Number, newHeight:Number):void
		{
			//TODO: implement function
		}
		
		/**
		 * 在被移除的时候 强制执行垃圾清理
		 * */
		protected function removedFunction(event:Event):void
		{
			BaseGC.gc();
		}
		/**
		 * 传递一个事件
		 * */
		protected function dispath(eventClass:Class,eventType:String,par:Object):void
		{
			var event:Event = new Event(eventType,par);
			this.dispatchEvent(event);
		}
		/**
		 * loading 中读取的方法
		 * 
		 */		
		protected function loadingHandler(event:ProgressEvent):void
		{
			dispatchEvent(event);
		}
		
		/**
		 * 读取错误
		 * */
		protected function ioErrorHandler(event:IOErrorEvent):void
		{
			dispatchEvent(event);
		}
		
	}
}